#pragma once

#include "message_handler.hpp"
#include <libwebsockets.h>
#include <nlohmann/json.hpp>
#include <string>
#include <memory>
#include <unordered_map>
#include <mutex>

/**
 * @class MessageRouter
 * @brief 消息路由器
 * @details 管理所有消息处理器，并将消息路由到相应的处理器
 */
class MessageRouter {
public:
    static MessageRouter& getInstance();

    /**
     * @brief 注册消息处理器
     * @param handler 消息处理器
     */
    void registerHandler(std::shared_ptr<MessageHandler> handler);

    /**
     * @brief 路由消息到对应的处理器
     * @param wsi WebSocket实例
     * @param message 消息内容
     */
    void route(struct lws *wsi, const std::string& message);

private:
    MessageRouter() = default;
    
    std::unordered_map<std::string, std::shared_ptr<MessageHandler>> handlers_;
    std::mutex handlers_mutex_;
}; 